package org.openfantasia.musica.instruments.jmusic;

import jm.audio.io.SampleOut;
import jm.audio.synth.AllPass;
import jm.audio.synth.EnvPoint;
import jm.audio.synth.Oscillator;

/**
 * An all pass filter is not unlike a comb filter in that it delays
 * the signal and recombines a scalled version. But it is more complex
 * in having both a fee back and feed forward adding of the delayed signal
 */
public final class SimpleAllPassInst extends jm.audio.Instrument {

	/**
	 * The points to use in the construction of Envelopes
	 */
	private EnvPoint[] pointArray = new EnvPoint[10];

	/**
	 * The number of channels
	 */
	private int channels;

	/**
	 * the sample rate passed to the instrument
	 */
	private int sampleRate;

	/**
	 * the number of samples to delay the signal in the filter
	 */
	private int delay;


	/**
	 * A constructor to set an initial sampling rate
	 */
	public SimpleAllPassInst(int sampleRate) {
		this(sampleRate, 1, 10);
	}


	/**
	 * A constructor to set an initial sampling rate and number of channels.
	 */
	public SimpleAllPassInst(int sampleRate, int channels, int delay) {
		this.sampleRate = sampleRate;
		this.channels = channels;
		this.delay = delay;
	}


	/**
	 * Initialisation method used to build the objects that this instrument will use
	 */
	public void createChain() {
		Oscillator osc = new Oscillator(this, Oscillator.TRIANGLE_WAVE, this.sampleRate, this.channels);
		AllPass ap = new AllPass(osc, this.delay);
		SampleOut sout = new SampleOut(ap);
	}
}


